#pragma once

#include <string>
#include <sstream>

#define WIDEEDEX(N) L ## N
#define WIDENEX(x) WIDEEDEX(x)
#define __WFILEEX__ WIDENEX(__FILE__)

namespace base {

template<class TString = std::wstring>
class HBaseDefine {

public:
    static TString track_desc(const TString& _file, int _line, const TString& _desc) {
        std::wostringstream l_stream;
        l_stream << L"File: "  << _file << " Line: " << _line << " Desc: " << _desc;
        return l_stream.str();
    }

#define TRACK_DESC(TString,vl) base::HBaseDefine<TString>::track_desc(__WFILEEX__, __LINE__, vl)
};
    
} // namespace base